package org.web.standardplatform.client.domain.attribute.view;

import lombok.Getter;
import lombok.Setter;
import org.web.standardplatform.client.domain.attribute.AttributeDTO;
import org.web.standardplatform.client.domain.attribute.type.SelectorType;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;

@Setter
@Getter
public class SearchFormFieldDefinition {

    private AttributeDTO attributeDTO;

    /***
     * 查询字段的显示标签，用于表单中显示字段的名称。参见【总体概览】/【概览】/【中文简称】
     * */
    @NotEmpty
    private String queryAttributeLabel;

    /***
     * 查询字段的名称，对应表单数据的键名。参见【查询条件映射规则】，受限于接口规格。
     */
    @NotEmpty
    private String queryAttributeName;

    /***
     * 查询字段的占位符，用于在表单组件中显示提示文本。【查询条件映射规则】/【tooltip】信息定义。
     * */
    @NotEmpty
    private String queryAttributePlaceholder;

    /***
     * 查询文本框的输入类型，不允许为空，且在指定范围内。文本输入框类型如下：
     * 日期时间范围选择框
     * 日期范围选择框
     * 下拉菜单, 如果指定select, 则必须设置selectOperate。
     * 选择某一日期
     * 只能是数字
     * */
    @NotEmpty
    @Pattern(regexp = "^(text|password|select|date-range|datetime-range|date|number)$")
    private String queryEditType;

    /***
     * 查询对象，用于指定查询的属性信息，来源于哪个查询对象。整个searchFormConfig, 如果存在多个queryRequest， 说明后端接口服务是多个查询对象构建出的复杂对象，会自动构建嵌套层级，向后端接口服务传递值。
     */
    private String queryRequest;

    private SelectorType selectorType;

    /***
     * 查询属性展示排序，数值类型。根据数值大小，从小到大展示。数字相同，则按读取的顺序排序。
     * */
    @NotNull
    private Integer querySort;


    /***
     * 不设置，或者 isDefaultHidden==false， 即默认进行展示，只有isDefaultHidden==true时，默认不进行展示，放置在隐藏查询区域里。
     * */
    private Boolean isDefaultHidden;

    /***
     * 查询字段的宽度，单位px。可以不进行指定，不指定前端模板会设置默认值。
     * */
    private String queryWidth;

    /***
     * 虽然是个字符串，但本质上是一个List<RuleItem> 数组，转义成的字符串。
     * */
    private String rules;

    private String editTypeOperateExtend;

    private String queryExtend;
}
